package com.studentbook.util;

import com.studentbook.bean.StudentContact;

import java.io.*;
import java.nio.file.Paths;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import com.studentbook.dao.StudentContactDao;
import java.util.Date;
import java.util.List;

/**
 * 文件操作工具类
 * 用于从文件中读取和写入通讯录信息
 */
public class FileUtil {
    // 默认文件保存路径
    /**
     * D：/study路径必须在自己电脑存在
     * contacts.txt文件会自己创建
     */
    private static final String DEFAULT_FILE_PATH = Paths.get("D:", "study", "contacts.txt").toString();
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 将通讯录信息保存到文件中
     * @param contacts 通讯录信息列表
     * @param filePath 文件路径，如果为null则使用默认路径
     * @return 是否保存成功
     */
    public static boolean saveContactsToFile(List<StudentContact> contacts, String filePath) {
        if (filePath == null || filePath.trim().isEmpty()) {
            filePath = DEFAULT_FILE_PATH;
        }

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            // 写入文件头
            writer.write("ID,学号,姓名,年级,联系方式,创建时间,更新时间");
            writer.newLine();

            // 写入每条联系人记录
            for (StudentContact contact : contacts) {
                StringBuilder sb = new StringBuilder();
                sb.append(contact.getId() != null ? contact.getId() : "").append(",");
                sb.append(contact.getStudentId() != null ? contact.getStudentId() : "").append(",");
                sb.append(contact.getName() != null ? contact.getName() : "").append(",");
                sb.append(contact.getGrade() != null ? contact.getGrade() : "").append(",");
                sb.append(contact.getContactInfo() != null ? contact.getContactInfo() : "").append(",");
                sb.append(contact.getCreateTime() != null ? DATE_FORMAT.format(contact.getCreateTime()) : "").append(",");
                sb.append(contact.getUpdateTime() != null ? DATE_FORMAT.format(contact.getUpdateTime()) : "");

                writer.write(sb.toString());
                writer.newLine();
            }

            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 从文件中读取通讯录信息
     * @param filePath 文件路径，如果为null则使用默认路径
     * @return 通讯录信息列表
     */
    public static List<StudentContact> loadContactsFromFile(String filePath) {
        if (filePath == null || filePath.trim().isEmpty()) {
            filePath = DEFAULT_FILE_PATH;
        }

        List<StudentContact> contacts = new ArrayList<>();
        StudentContactDao contactDao = new StudentContactDao();
        File file = new File(filePath);

        // 如果文件不存在，返回空列表
        if (!file.exists()) {
            return contacts;
        }

        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            // 跳过文件头
            String line = reader.readLine();

            // 读取每行数据
            while ((line = reader.readLine()) != null) {
                String[] fields = line.split(",");
                if (fields.length >= 7) {
                    StudentContact contact = new StudentContact();

                    // 设置ID
                    if (!fields[0].isEmpty()) {
                        contact.setId(Integer.parseInt(fields[0]));
                    }

                    // 设置学号
                    contact.setStudentId(fields[1]);

                    // 设置姓名
                    contact.setName(fields[2]);

                    // 设置年级
                    contact.setGrade(fields[3]);

                    // 设置联系方式
                    contact.setContactInfo(fields[4]);

                    // 设置创建时间
                    if (!fields[5].isEmpty()) {
                        try {
                            contact.setCreateTime(DATE_FORMAT.parse(fields[5]));
                        } catch (ParseException e) {
                            contact.setCreateTime(new Date());
                        }
                    }

                    // 设置更新时间
                    if (!fields[6].isEmpty()) {
                        try {
                            contact.setUpdateTime(DATE_FORMAT.parse(fields[6]));
                        } catch (ParseException e) {
                            contact.setUpdateTime(new Date());
                        }
                    }

                    contacts.add(contact);
                    // 将联系人存储到数据库
                    // 插入数据库
//                    StudentContact existContact = dao.findByStudentId(contact.getStudentId());
//                    if (existContact == null) {
//                        dao.add(contact);
//                    } else {
//                        contact.setId(existContact.getId());
//                        dao.update(contact);
//                    }
                    contactDao.add(contact);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return contacts;
    }
}
